from flask import Flask, jsonify
from flask import render_template
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy import CheckConstraint
from app import UK2019ElecDatabase

# Debugged typos using Phind

class candidates(UK2019ElecDatabase.Model):
    __tablename__ = "candidates"
    candidate_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, primary_key=True)
    firstname = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    surname = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    gender = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    sitting_mp = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(3))
    check = (CheckConstraint(sitting_mp.in_(("Yes", "No")), name='check_sitting_mp_values'),)
    party_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, UK2019ElecDatabase.ForeignKey('parties.party_id'), nullable=False)
    constituency_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, UK2019ElecDatabase.ForeignKey('constituencies.constituency_id'), nullable=False)

class votes(UK2019ElecDatabase.Model):
    __tablename__ = "votes"
    vote_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, primary_key=True)
    constituency_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer,UK2019ElecDatabase.ForeignKey('constituencies.constituency_id'), nullable=False)
    party_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, UK2019ElecDatabase.ForeignKey('parties.party_id'), nullable=False)
    candidate_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, UK2019ElecDatabase.ForeignKey('candidates.candidate_id'), nullable=False)
    votes = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, nullable=False)

class parties(UK2019ElecDatabase.Model):
    __tablename__ = "parties"
    party_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, primary_key=True)
    party_name = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)

class constituencies(UK2019ElecDatabase.Model):
    __tablename__ = "constituencies"
    constituency_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, primary_key=True)
    constituency_name = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    county_name = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    region_name = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    country_name = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    constituency_type = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)

class results(UK2019ElecDatabase.Model):
    __tablename__ = "results"
    result_id = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, primary_key=True)
    system1 = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    party = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
    seat_allocation = UK2019ElecDatabase.Column(UK2019ElecDatabase.Integer, nullable=False)
    percentage_of_seats = UK2019ElecDatabase.Column(UK2019ElecDatabase.Float, nullable=False)
    percentage_of_popular_votes = UK2019ElecDatabase.Column(UK2019ElecDatabase.Float, nullable=False)
    difference_percentage = UK2019ElecDatabase.Column(UK2019ElecDatabase.Float, nullable=False)
    winning_party = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable = False)
    different_from_actual_winner = UK2019ElecDatabase.Column(UK2019ElecDatabase.String(255), nullable=False)
